package main

import (
	"fmt"
	"os"

	"github.com/atotto/clipboard"
	"github.com/martinlindhe/notify"
)

func main() {
	if len(os.Args) != 2 {
		fmt.Fprintf(os.Stderr, "用法: %s <文件名>\n", os.Args[0])
		os.Exit(1)
	}
	filename := os.Args[1]

	// 检查文件信息
	fileInfo, err := os.Stat(filename)
	if err != nil {
		sendNotification(true, "XCAT 错误", "无法获取文件信息: "+err.Error())
		fmt.Fprintf(os.Stderr, "错误: 无法获取文件信息 %s: %v\n", filename, err)
		os.Exit(1)
	}

	// 大文件警告
	if fileInfo.Size() > 100*1024*1024 {
		sendNotification(true, "XCAT 警告", "文件过大（>100MB），可能导致卡顿")
		fmt.Fprintf(os.Stderr, "警告: 文件 %s 过大（>100MB），可能导致卡顿\n", filename)
	}

	// 读取文件
	content, err := os.ReadFile(filename)
	if err != nil {
		sendNotification(true, "XCAT 错误", "无法读取文件: "+err.Error())
		fmt.Fprintf(os.Stderr, "错误: 无法读取文件 %s: %v\n", filename, err)
		os.Exit(1)
	}

	// 兼容处理：使用 WriteAll（所有版本均支持）
	if err := clipboard.WriteAll(string(content)); err != nil {
		sendNotification(true, "XCAT 错误", "无法复制到剪贴板: "+err.Error())
		fmt.Fprintf(os.Stderr, "错误: 无法复制到剪贴板: %v\n", err)
		os.Exit(1)
	}

	// 成功通知
	sendNotification(false, "XCAT 成功", fmt.Sprintf(
		"文件 %s 内容已复制到剪贴板（大小: %.2fKB）",
		filename, float64(len(content))/1024,
	))
}

// 发送通知：根据类型区分级别
func sendNotification(isError bool, title, message string) {
	if isError {
		notify.Alert("xcat", title, message, "") // 错误/警告：高优先级
	} else {
		notify.Notify("xcat", title, message, "") // 成功：普通优先级
	}
}
